#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QTimer>
#include <QFile>
#include <QProgressDialog>
#include "bootloader.h"
#include "configparser.h"

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    // 串口操作槽函数
    void onRefreshPortsClicked();
    void onConnectClicked();

    // 文件操作槽函数
    void onOpenFileClicked();

    // 设备操作槽函数
    void onProgramClicked();
    void onEraseClicked();
    void onResetClicked();

    // Bootloader 信号处理槽函数
    void handleBootloaderProgress(int progress, const QString &message);
    void handleBootloaderFinished(bool success, const QString &message);
    void handleBootloaderError(const QString &error);
    void handleBootloaderLog(const QString &message);

private:
    // 初始化函数
    void setupUI();
    void setupConnections();

    // 状态更新函数
    void updatePortInfo();
    void updateConnectionStatus(bool connected);
    void appendLog(const QString &message, bool isError = false);

private:
    Ui::MainWindow *ui;
    Bootloader *m_bootloader;
    QProgressDialog *m_progressDialog;
    QString m_currentFile;
    QSerialPort *serial;
    ConfigParser *m_configParser;
};

#endif // MAINWINDOW_H
